mlpfandomcom_ru-20200216-history
Модуль:Появления
local appearance = {} function appearance.appearanceCreate(frame) local args = frame.args local mainTable = appearance.build.mainTableCreate() local sc = 1 while args'..sc do local short local seasonTable = {} if (args'..sc ~= 'none') then local statusTable = appearance.tools.split(args'..sc, ';') for i = 1, #statusTable do local statusNameTable = appearance.tools.split(statusTablei, ':') local appStatus if statusNameTable1 'главный' then appStatus = 1 elseif statusNameTable1 'второстепенный' then appStatus = 2 elseif statusNameTable1 'фоновый' then appStatus = 3 elseif statusNameTable1 'упоминаемый' then appStatus = 4 end if appStatus and statusNameTable2 then local seriesTable = appearance.tools.split(statusNameTable2, ',') for j = 1, #seriesTable do if string.find(seriesTablej, '-') then local interval = appearance.tools.split(seriesTablej, '-') if interval2 and tonumber(interval1) and tonumber(interval2 and interval1 <= interval2) then for k = interval1, interval2 do seasonTablek = appStatus end end elseif tonumber(seriesTablej) then seasonTable[seriesTablej] = appStatus end local line = appearance.build.lineCreate(seasonTable, sc, 1) mainTable:node(line) if sc % 3 ~= 0 then line = appearance.build.lineCreate(seasonTable, sc, 13) mainTable:node(line) end end end end end sc = sc + 1 end return mainTable end --создание элементов appearance.build = {} --создание пустой таблицы function appearance.build.mainTableCreate() local mainTable = mw.html.create('table') local headerLine = mw.html.create("tr") local header = mw.html.create("th") header:attr('colspan', '14') header:wikitext('Присутствие в сериях') headerLine:node(header) mainTable:node(headerLine) return mainTable end --создание строки таблицы function appearance.build.lineCreate(data, count, sNum) local line = mw.html.create("tr") if sNum 1 then local leftColumn = mw.html.create("th") leftColumn:wikitext('Сезон '..count) if count % 3 ~= 0 then leftColumn:attr('rowspan', '2') end line:node(leftColumn) end -- local appData = {title1 = 'появляется на главной роли', class1 = 'apperanceLC', -- title2 = 'появляется на второстепенной роли', class2 = 'apperanceSC', -- title3 = 'появляется на фоновой роли', class3 = 'apperanceBC', -- title4 = 'появляется как ГГ', class4 = 'apperanceMC', -- } -- for i = sNum, Snum + 12 do -- cell = mw.html.create("td") -- cell:wikitext(i) -- cell:attr('title', appData['title'..datai]) -- cell:addClass(appData['title'..classi]) -- line:node(cell) -- end return line end --служебные функции appearance.tools = {} --Краткое описание: Возвращает таблицу, содержащую подстроки строки "str", разделенные элементами строки "separator". Если "reg" - истина, то "separator" вместо строки принимает образец. Несколько сепараторов подряд рассматриваются как один. Если "str" "separator" то возвращается пустой массив.-- function appearance.tools.split(str, separator, reg) local result = {} --Проверка строки if(not str or type(str) ~= 'string' or #str 0) then result1 = 'Ошибка 1' result2 = 'Проверь параметр "str"' result3 = 1 return result end --проверка сепаратора if (not separator or type(separator) ~= 'string' or #separator 0) then result1 = 'Ошибка 2' result2 = 'Проверь параметр "separator"' result3 = 2 return result end --Проверка на образец if (not reg) then regExp = true else regExp = false end --переменные позиций local n local k --управляющие переменные local s = 0 local i = 1 --главный цикл while k ~= str:len() do --поиск сепаратора local substring n, k = string.find(str, separator, s + 1, regExp) --если поиск не дал результатов if (k nil or n nil) then resulti = string.sub(str, s + 1, str:len()) break end substring = string.sub(str, s + 1, n - 1) --добавление результата if substring ~= "" then resulti = substring i = i + 1 end s = k end return result end return appearance